import akshare as ak
import pandas as pd
import sqlite3
from datetime import datetime, timedelta

from sqlitetool import sqlite3_tool as st


def get_hs300etf_data():
    # 获取当前日期
    today = datetime.now()
    # 计算一年前的日期
    one_year_ago = today - timedelta(days=365)

    # 获取沪深300ETF日线数据
    hs300etf_df = ak.fund_etf_hist_em(
        symbol="510300",
        period="daily",
        start_date=one_year_ago.strftime("%Y%m%d"),
        end_date=today.strftime("%Y%m%d"),
    )

    # 数据处理，确保日期格式正确
    # hs300etf_df["日期"] = pd.to_datetime(hs300etf_df["日期"])
    hs300etf_df["code"] = "510300"
    hs300etf_df["name"] = "沪深300ETF"
    # 日期     开盘     收盘     最高     最低       成交量           成交额    振幅   涨跌幅    涨跌额   换手率
    hs300etf_df.rename(
        columns={
            "日期": "trade_date",
            "开盘": "open_price",
            "收盘": "close_price",
            "最高": "high_price",
            "最低": "low_price",
            "成交量": "volume",
            "成交额": "amount",
        },
        inplace=True,
    )
    print(hs300etf_df.head())
    print("get_hs300etf_data")
    return hs300etf_df


def get_db_tool():
    # 连接到SQLite数据库（如果不存在则创建）
    db_tool = st.SQLiteTool("financial_data.db")
    return db_tool


def check_and_create_table(db_tool, table_name):
    # 建表语句
    create_table_sql = """
    CREATE TABLE IF NOT EXISTS {table_name} (
        id INTEGER PRIMARY KEY AUTOINCREMENT, -- 主键ID
        code TEXT, -- 代码
        name TEXT, -- 名称
        trade_date DATE NOT NULL, -- 交易日期
        open_price FLOAT, -- 开盘价
        high_price FLOAT, -- 最高价
        low_price FLOAT, -- 最低价
        close_price FLOAT, -- 收盘价
        volume FLOAT, -- 成交量
        amount FLOAT, -- 成交额
        create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
        update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 更新时间
        CONSTRAINT uc_code_trade_date UNIQUE (code, trade_date)
    );
    """.format(
        table_name=table_name
    )
    # 执行建表语句
    db_tool.execute_query(create_table_sql)
    print("check_and_create_table")


def insert_hs300etf_data(db_tool, table_name, hs300etf_df):
    # 插入数据
    for index, row in hs300etf_df.iterrows():
        # 插入新记录
        insert_data = {
            # "id": 0,
            "code": row["code"],
            "name": row["name"],
            "trade_date": datetime.strftime(row["trade_date"], "%Y-%m-%d"),
            "open_price": row["open_price"],
            "high_price": row["high_price"],
            "low_price": row["low_price"],
            "close_price": row["close_price"],
            "volume": row["volume"],
            "amount": row["amount"],
            "create_time": datetime.now(),
            "update_time": datetime.now(),
        }

        in_rs = db_tool.insert(table_name, insert_data)
        # print("insert rs = ", in_rs)


def main():
    table_name = "hs300etf_daily"
    hs300etf_df = get_hs300etf_data()
    db_tool = get_db_tool()  # 连接到SQLite数据库
    check_and_create_table(db_tool, table_name)  # 建表
    insert_hs300etf_data(db_tool, table_name, hs300etf_df)  # 插入数据
    print("sqlite3_tool.py")


if __name__ == "__main__":
    main()
